查看原文
其他

STM32最小系统板教程第三章第1讲|从“点灯”入门STM32

电子开发学习 电子开发学习 2021-01-31


置顶公众号,不错过每一讲内容。




完整课程体系(公众号每日更新一讲):



本讲知识点:点亮一个发光二极管、模块化编程


3.1.1   从点灯开始


从本讲开始,我们就要开始驱动核心板上的外设了,第一个外设当然是“亘古不变 ”的点灯了。在点灯之前,大家是否有过这样的经历,在写驱动代码的时候,只有一个源文件,里面第一个函数为主函数,后面跟着很多外设的驱动函数,这样整个代码臃肿混杂,很不利于我们进行维护或二次开发,因此模块化编程大家是很有必要掌握的。所谓模块化编程,就是一个.c(源文件)对应一个.h(头文件),每个外设都有对应的.c和.h,这样要使用某个外设驱动,只需包含对应的头文件即可,这种模块化编程非常利于开发与移植。我们以后的外设驱动都是采用模块化进行编程。


首先,我们复制一个上一讲所搭建好的工程模板(路径自定义),文件夹改名为LED,打开文件夹单击工程名也改名为LED,同时创建一个 Drive文件夹,在里面新建一个src(包含用户编写的所有源文件)和一个 Inc(包含用户编写的所有头文件)文件夹,如下图所示:

 


图3-1-1 LED模块化编程搭建


 然后,打开LED工程,本讲“ 点灯 ”所需要驱动的是GPIO外设,因此我们需要添加GPIO的标准库。

 


图3-1-2 添加GPIO库函数


 今后我们驱动其他外设,添加对应库函数的方法都与上述一致,以后就不赘述了。接下来,我们就需要编写GPIO的初始化函数,先新建两个新文件,分别命名为led.c和led.h,led.c放于Drive\src下,led.h放于Drive\inc下,如下图所示:

 


图3-1-3 新建led.c源文件

 

 

图3-1-4 新建led.h头文件


 接下来需要新建一个DRIVE分组,并将led.c源文件添加到DRIVE分组下,同时还需要添加led.h头文件路径,具体如下图所示:

 


图3-1-5 添加led.c至DRIVE分组下

 

 

 


图3-1-6添加头文件路径


接下来,编写led.c中GPIO初始化函数,写之前我们先看一下原理图中用户灯的驱动电路。USER_LED对应的是PC13引脚,由LED的驱动电路不难看出,当PC13输出为高电平时,发光二极管两端电压都是高电平,不导通则灯自然也不会亮,当PC13输出为低电平时,发光二极管处于正向导通状态,则灯会亮。这里限于篇幅只展示写好后的代码,具体过程见对应的课程视频。

 

图3-1-7 USER_LED驱动电路

 

图3-1-8 LED初始化配置

 

图3-1-9 led.h头文件

 

图3-1-10 主函数点亮LED

 

主函数中,先初始化USER_LED对应的GPIO引脚PC13,while(1)中PC13循环输出低电平,所以开发板上的USER_LED应该始终被点亮,不会熄灭,接下来我们就将程序“ 烧写 ”到开发板中观察现象。

 



图3-1-11 DEBUG配置

 

图3-1-12 仿真器与核心板连接示意图

 

图3-1-13 程序编译与下载

 

图3-1-14 实验现象


3.1.2   让灯闪烁起来


现在灯可以被点亮和熄灭了,但它只是维持一种状态,如果我们想让它在一段时间内亮,一段时间内灭,这时就需要加入延时了。现在我们在工程里再加入delay.c和delay.h两个文件,添加步骤和led.c、led.h一样,这里就不在赘述了(不熟悉的话可以再仔细理解下前面的文档和对应视频讲解)。添加好源文件和头文件进行编译后如下图所示:

 

图3-1-15 添加delay.c和delay.h

 

这里给大家展示一种“ 粗 ”延时法,相信学过51的朋友都很熟悉,整体代码如下图所示:

 

图3-1-16 “粗”延时函数

 

我们在主函数里加入这个延时函数,编译后没有错误下载到开发板上观察灯的闪烁情况,用示波器实际测量它的波形,如下图所示:

 

 

图3-1-17 “ 粗 ”延时波形

 

根据示波器所测的波形,频率为0.61Hz,周期约为1.64s,我们可以看出这种“ 粗 ”延时法不能直接准确实现我们想要延长的时间,日后我们需要用到准确的毫秒级甚至微妙级延时,因此这种方法在STM32中不适用,具体的准确延时内容请阅读下一讲内容。


本讲就到这里,趁热打铁,大家亲自动手试一试吧 



视频课程(点击文末左下角“阅读原文”,可看高清视频):



最小系统板的购买链接(复制到淘宝打开即可):

https://item.taobao.com/item.htm?&id=573256065703


elink32仿真器购买链接(复制到淘宝打开即可):

https://item.taobao.com/item.htm?&id=558334383550


课程系列回顾:


STM32最小系统板教程第一章|开发板资源介绍

STM32最小系统板教程第二章|软件开发环境的介绍与安装

STM32最小系统板教程第二章第2讲|工程模板的搭建




感谢您阅读“电子开发学习”的文章,如果您觉得图文能帮助您学习,欢迎关注我们。请点击右上角按钮,选择“查看公众号”,再点击关注即可。或者可以通过搜索公众号的方式关注: electricstudy  。您可以通过扫码下面的二维码关注我们。如果您想阅读往期文章,可点击“查看历史消息”。





历史好文推荐(点击文章标题可跳转):

小马哥四轴硬件第1讲、    Altium Designer安装与介绍

小马哥四轴硬件第2讲上、原理图讲解之MCU最小系统讲解

小马哥四轴硬件第2讲下、原理图各模块讲解

小马哥四轴硬件第3讲上、AD库制作之原理图库的制作

小马哥四轴硬件第3讲下、AD库制作之PCB封装库的制作

小马哥四轴硬件第4讲上、原理图绘制

小马哥四轴硬件第4讲下、原理图绘制

小马哥四轴硬件第5讲、    用CAD绘制小四轴PCB外形

小马哥四轴硬件第6讲、    四轴PCB板元器件布局

小马哥四轴硬件第7讲上、PCB布线与2.4G模块布线

小马哥四轴硬件第7讲下、PCB布线之电源布线与敷铜

小马哥四轴硬件第8讲、    四轴四层板PCB板设计

小马哥四轴硬件第9讲、    原理图及PCB的检查

C#上位机开发1 |  Hello World!

AD学习—STM32F103最小系统板制作

新手上手STM32是学习库开发还是寄存器开发?

openmv学习2-寻找色块并打印出坐标

如何解决单片机下载程序失败的问题(文末有彩蛋)

如何让Arduino IDE支持你手里的STM32 nucleo开发板

新手如何使用STM32两个月内做出自己的空心杯小四轴(1)

新手如何使用STM32两个月内做出自己的空心杯小四轴(2)

新手如何使用STM32两个月内做出自己的空心杯小四轴(3)

新手如何使用STM32两个月内做出自己的空心杯小四轴(4)

如何根据芯片手册时序图编写驱动程序

双轮平衡车暴力拆解

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存